using System;
using System.Collections.Generic;
using System.Text;
using Entidades;
using DataAccessArquitectura;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

/*
 * Nombre archivo: semana_baseBuilder.cs 
 *
 * Descripcion: Manipulacion de la tabla semana_base, con los metodos de consulta, grabado, actulaizacion
 * y recuperacion de un registro
 *
 * Autor: PLUS-EW
 * Fecha: 30/08/2011 18:38:01
 *
 * Historial
 * ---------------------------------------------------------
 * Autor            Fecha               Modificación
 *
 */

namespace Reglas_Negocio
{
	public class semana_baseBuilder
	{
		private const enmTipoBaseDatos mTipoBD = enmTipoBaseDatos.MySQL;

		#region < METODOS PUBLICOS CONSULTA >
		public static DataTable ListarTodos()
		{
			try
			{
				return ListarTodos("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static DataTable ListarTodos(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("*", "semana_base", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		public static bool Existe(string filtro)
		{
			int numero = 0;
			bool r = false;
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				numero = Convert.ToInt32(bd.EjecutarSelectScalar("COUNT(*)", "semana_base", filtro));
				r = (numero > 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS GRABADO >
		public static bool GrabarViaProcedimiento(semana_base datos)
		{
			int numero = 0;
			bool r = false;
			string filtro = "";
			try
			{
				string strConectionInsert = "INSERT INTO semana_base (nro_matutina_sem,nro_vespertina_sem,nro_nocturna,nro_emp_sem,nro_dias_sem,estado_sem,fecha_registro_sem,fecha_inicio_sem,fecha_fin_sem) VALUES (?nro_matutina_sem,?nro_vespertina_sem,?nro_nocturna,?nro_emp_sem,?nro_dias_sem,?estado_sem,?fecha_registro_sem,?fecha_inicio_sem,?fecha_fin_sem);";
				string strConectionUpdate = "UPDATE semana_base SET nro_matutina_sem = ?nro_matutina_sem,nro_vespertina_sem = ?nro_vespertina_sem,nro_nocturna = ?nro_nocturna,nro_emp_sem = ?nro_emp_sem,nro_dias_sem = ?nro_dias_sem,estado_sem = ?estado_sem,fecha_registro_sem = ?fecha_registro_sem,fecha_inicio_sem = ?fecha_inicio_sem,fecha_fin_sem = ?fecha_fin_sem WHERE id_sem=?id_sem;";

				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				MySqlParameter psqlId_sem = new MySqlParameter("?id_sem", MySqlDbType.Int32);
				MySqlParameter psqlNro_matutina_sem = new MySqlParameter("?nro_matutina_sem", MySqlDbType.Int32);
				MySqlParameter psqlNro_vespertina_sem = new MySqlParameter("?nro_vespertina_sem", MySqlDbType.Int32);
				MySqlParameter psqlNro_nocturna = new MySqlParameter("?nro_nocturna", MySqlDbType.Int32);
				MySqlParameter psqlNro_emp_sem = new MySqlParameter("?nro_emp_sem", MySqlDbType.Int32);
				MySqlParameter psqlNro_dias_sem = new MySqlParameter("?nro_dias_sem", MySqlDbType.Int32);
				MySqlParameter psqlEstado_sem = new MySqlParameter("?estado_sem", MySqlDbType.VarChar,20);
				MySqlParameter psqlFecha_registro_sem = new MySqlParameter("?fecha_registro_sem", MySqlDbType.Datetime);
				MySqlParameter psqlFecha_inicio_sem = new MySqlParameter("?fecha_inicio_sem", MySqlDbType.Datetime);
				MySqlParameter psqlFecha_fin_sem = new MySqlParameter("?fecha_fin_sem", MySqlDbType.Datetime);

				psqlId_sem.Value = datos.Id_sem;
				psqlNro_matutina_sem.Value = datos.Nro_matutina_sem;
				psqlNro_vespertina_sem.Value = datos.Nro_vespertina_sem;
				psqlNro_nocturna.Value = datos.Nro_nocturna;
				psqlNro_emp_sem.Value = datos.Nro_emp_sem;
				psqlNro_dias_sem.Value = datos.Nro_dias_sem;
				psqlEstado_sem.Value = datos.Estado_sem;
				psqlFecha_registro_sem.Value = datos.Fecha_registro_sem;
				psqlFecha_inicio_sem.Value = datos.Fecha_inicio_sem;
				psqlFecha_fin_sem.Value = datos.Fecha_fin_sem;

				if (!Existe("id_sem=" + datos.Id_sem))
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionInsert
							, psqlId_sem
							, psqlNro_matutina_sem
							, psqlNro_vespertina_sem
							, psqlNro_nocturna
							, psqlNro_emp_sem
							, psqlNro_dias_sem
							, psqlEstado_sem
							, psqlFecha_registro_sem
							, psqlFecha_inicio_sem
							, psqlFecha_fin_sem
							);
					MessageBox.Show("Se grabo [semana_base] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionUpdate
							, psqlId_sem
							, psqlNro_matutina_sem
							, psqlNro_vespertina_sem
							, psqlNro_nocturna
							, psqlNro_emp_sem
							, psqlNro_dias_sem
							, psqlEstado_sem
							, psqlFecha_registro_sem
							, psqlFecha_inicio_sem
							, psqlFecha_fin_sem
							);
					MessageBox.Show("Se actualizó [semana_base] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				r = (numero < 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static void GrabarViaSql(semana_base datos)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
                string filtro = string.Format("id_sem='{0}' OR estado_sem='{1}'", datos.Id_sem,datos.Estado_sem);
				if (!Existe(filtro))
				{
					bd.EjecutarInsert("semana_base"
						, new CampoValor("nro_matutina_sem", datos.Nro_matutina_sem.ToString())
						, new CampoValor("nro_vespertina_sem", datos.Nro_vespertina_sem.ToString())
						, new CampoValor("nro_nocturna", datos.Nro_nocturna.ToString())
						, new CampoValor("nro_emp_sem", datos.Nro_emp_sem.ToString())
						, new CampoValor("nro_dias_sem", datos.Nro_dias_sem.ToString())
						, new CampoValor("estado_sem", datos.Estado_sem)
						, new CampoValor("fecha_registro_sem",ValidarBuilder.FormatoFecha( datos.Fecha_registro_sem))
						, new CampoValor("fecha_inicio_sem",ValidarBuilder.FormatoFecha( datos.Fecha_inicio_sem))
						, new CampoValor("fecha_fin_sem",ValidarBuilder.FormatoFecha( datos.Fecha_fin_sem))
						);
					MessageBox.Show("Se grabo [semana_base] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					bd.EjecutarUpdate("semana_base", filtro
						, new CampoValor("nro_matutina_sem", datos.Nro_matutina_sem.ToString())
						, new CampoValor("nro_vespertina_sem", datos.Nro_vespertina_sem.ToString())
						, new CampoValor("nro_nocturna", datos.Nro_nocturna.ToString())
						, new CampoValor("nro_emp_sem", datos.Nro_emp_sem.ToString())
						, new CampoValor("nro_dias_sem", datos.Nro_dias_sem.ToString())
						, new CampoValor("estado_sem", datos.Estado_sem)
						, new CampoValor("fecha_registro_sem",ValidarBuilder.FormatoFecha( datos.Fecha_registro_sem))
						, new CampoValor("fecha_inicio_sem",ValidarBuilder.FormatoFecha( datos.Fecha_inicio_sem))
						, new CampoValor("fecha_fin_sem",ValidarBuilder.FormatoFecha( datos.Fecha_fin_sem))
						);
					MessageBox.Show("Se actualizó [semana_base] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

        public static void Actualiza_estado(string nuevo_estado)
        {
            try
            {
                ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);                
                bd.EjecutarUpdate("semana_base"
                    , new CampoValor("estado_sem", nuevo_estado)
                    );

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
		#endregion

		#region < METODOS PUBLICOS RECUPERACION >
		public static semana_base Recuperar(string filtro)
		{
			semana_base r = new semana_base();
			try
			{
				if (Existe(filtro))
				{
					DataTable ds = ListarTodos(filtro);
					r.Id_sem = Convert.ToInt32(ds.Rows[0]["id_sem"]);
					r.Nro_matutina_sem = Convert.ToInt32(ds.Rows[0]["nro_matutina_sem"]);
					r.Nro_vespertina_sem = Convert.ToInt32(ds.Rows[0]["nro_vespertina_sem"]);
					r.Nro_nocturna = Convert.ToInt32(ds.Rows[0]["nro_nocturna"]);
					r.Nro_emp_sem = Convert.ToInt32(ds.Rows[0]["nro_emp_sem"]);
					r.Nro_dias_sem = Convert.ToInt32(ds.Rows[0]["nro_dias_sem"]);
					if (ds.Rows[0]["estado_sem"] != System.DBNull.Value)
						r.Estado_sem = ds.Rows[0]["estado_sem"].ToString();
					if (ds.Rows[0]["estado_sem"] == System.DBNull.Value)
						r.Estado_sem = "";
					if (ds.Rows[0]["fecha_registro_sem"] != System.DBNull.Value)
						r.Fecha_registro_sem = Convert.ToDateTime(ds.Rows[0]["fecha_registro_sem"]);
					if (ds.Rows[0]["fecha_registro_sem"] == System.DBNull.Value)
						r.Fecha_registro_sem = DateTime.Now;
					if (ds.Rows[0]["fecha_inicio_sem"] != System.DBNull.Value)
						r.Fecha_inicio_sem = Convert.ToDateTime(ds.Rows[0]["fecha_inicio_sem"]);
					if (ds.Rows[0]["fecha_inicio_sem"] == System.DBNull.Value)
						r.Fecha_inicio_sem = DateTime.Now;
					if (ds.Rows[0]["fecha_fin_sem"] != System.DBNull.Value)
						r.Fecha_fin_sem = Convert.ToDateTime(ds.Rows[0]["fecha_fin_sem"]);
					if (ds.Rows[0]["fecha_fin_sem"] == System.DBNull.Value)
						r.Fecha_fin_sem = DateTime.Now;
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS BORRADO >
		public static void Borrar(string filtro)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				bd.EjecutarDelete("semana_base", filtro);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static void BorrarTodos()
		{
			try
			{
				Borrar("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion

		#region < METODOS PUBLICOS EXTRAS >
		public static void Listar_Combobox(ComboBox cmbsemana_base, string filtro, string nombre_display)
		{
			cmbsemana_base.DataSource = ListarTodos(filtro);
			cmbsemana_base.DisplayMember = nombre_display;
			cmbsemana_base.ValueMember = "id_sem";
		}

		public static DataTable ListarTodos_Alias(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("id_sem AS id_sem,nro_matutina_sem AS nro_matutina_sem,nro_vespertina_sem AS nro_vespertina_sem,nro_nocturna AS nro_nocturna,nro_emp_sem AS nro_emp_sem,nro_dias_sem AS nro_dias_sem,estado_sem AS estado_sem,fecha_registro_sem AS fecha_registro_sem,fecha_inicio_sem AS fecha_inicio_sem,fecha_fin_sem AS fecha_fin_sem", "semana_base", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static List<semana_base> ListarTodos_List(string filtro)
		{
			List<semana_base> r = new List<semana_base>();
			try
			{
				DataTable dt = ListarTodos(filtro);
				for (int i = 0; i < dt.Rows.Count; i++)
					r.Add(Recuperar("id_sem="+dt.Rows[i]["id_sem"]));
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		#endregion

		#region < METODOS PUBLICOS VALIDACION >
		public static semana_base valida_campos_semana_base(Control ctrl_id_sem,Control ctrl_nro_matutina_sem,Control ctrl_nro_vespertina_sem,Control ctrl_nro_nocturna,Control ctrl_nro_emp_sem,Control ctrl_nro_dias_sem,TextBox txt_estado_sem,DateTime dpk_fecha_registro_sem,DateTime dpk_fecha_inicio_sem,DateTime dpk_fecha_fin_sem)
		{
			bool r = true;
			semana_base new_semana_base = new semana_base();
			try
			{
				if(ctrl_id_sem.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_id_sem = (TextBox)ctrl_id_sem;
					if (txt_id_sem.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_sem","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_id_sem.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la id_sem","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_semana_base.Id_sem = Convert.ToInt32(txt_id_sem.Text);
				}
				if(ctrl_id_sem.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_id_sem = (ComboBox)ctrl_id_sem;
					if (cmb_id_sem.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_sem","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_semana_base.Id_sem = Convert.ToInt32(cmb_id_sem.SelectedValue);
				}
				if(ctrl_nro_matutina_sem.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_nro_matutina_sem = (TextBox)ctrl_nro_matutina_sem;
					if (txt_nro_matutina_sem.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la nro_matutina_sem","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_nro_matutina_sem.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la nro_matutina_sem","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_semana_base.Nro_matutina_sem = Convert.ToInt32(txt_nro_matutina_sem.Text);
				}
				if(ctrl_nro_matutina_sem.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_nro_matutina_sem = (ComboBox)ctrl_nro_matutina_sem;
					if (cmb_nro_matutina_sem.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la nro_matutina_sem","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_semana_base.Nro_matutina_sem = Convert.ToInt32(cmb_nro_matutina_sem.SelectedValue);
				}
				if(ctrl_nro_vespertina_sem.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_nro_vespertina_sem = (TextBox)ctrl_nro_vespertina_sem;
					if (txt_nro_vespertina_sem.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la nro_vespertina_sem","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_nro_vespertina_sem.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la nro_vespertina_sem","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_semana_base.Nro_vespertina_sem = Convert.ToInt32(txt_nro_vespertina_sem.Text);
				}
				if(ctrl_nro_vespertina_sem.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_nro_vespertina_sem = (ComboBox)ctrl_nro_vespertina_sem;
					if (cmb_nro_vespertina_sem.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la nro_vespertina_sem","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_semana_base.Nro_vespertina_sem = Convert.ToInt32(cmb_nro_vespertina_sem.SelectedValue);
				}
				if(ctrl_nro_nocturna.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_nro_nocturna = (TextBox)ctrl_nro_nocturna;
					if (txt_nro_nocturna.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la nro_nocturna","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_nro_nocturna.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la nro_nocturna","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_semana_base.Nro_nocturna = Convert.ToInt32(txt_nro_nocturna.Text);
				}
				if(ctrl_nro_nocturna.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_nro_nocturna = (ComboBox)ctrl_nro_nocturna;
					if (cmb_nro_nocturna.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la nro_nocturna","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_semana_base.Nro_nocturna = Convert.ToInt32(cmb_nro_nocturna.SelectedValue);
				}
				if(ctrl_nro_emp_sem.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_nro_emp_sem = (TextBox)ctrl_nro_emp_sem;
					if (txt_nro_emp_sem.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la nro_emp_sem","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_nro_emp_sem.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la nro_emp_sem","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_semana_base.Nro_emp_sem = Convert.ToInt32(txt_nro_emp_sem.Text);
				}
				if(ctrl_nro_emp_sem.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_nro_emp_sem = (ComboBox)ctrl_nro_emp_sem;
					if (cmb_nro_emp_sem.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la nro_emp_sem","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_semana_base.Nro_emp_sem = Convert.ToInt32(cmb_nro_emp_sem.SelectedValue);
				}
				if(ctrl_nro_dias_sem.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_nro_dias_sem = (TextBox)ctrl_nro_dias_sem;
					if (txt_nro_dias_sem.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la nro_dias_sem","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_nro_dias_sem.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la nro_dias_sem","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_semana_base.Nro_dias_sem = Convert.ToInt32(txt_nro_dias_sem.Text);
				}
				if(ctrl_nro_dias_sem.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_nro_dias_sem = (ComboBox)ctrl_nro_dias_sem;
					if (cmb_nro_dias_sem.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la nro_dias_sem","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_semana_base.Nro_dias_sem = Convert.ToInt32(cmb_nro_dias_sem.SelectedValue);
				}
				if (txt_estado_sem.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la estado_sem","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_semana_base.Estado_sem = txt_estado_sem.Text;
				if (r)
					new_semana_base.Fecha_registro_sem = dpk_fecha_registro_sem;
				if (r)
					new_semana_base.Fecha_inicio_sem = dpk_fecha_inicio_sem;
				if (r)
					new_semana_base.Fecha_fin_sem = dpk_fecha_fin_sem;

				if(!r)
					new_semana_base = null;
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return new_semana_base;
		}

		public static void grabar_actualizar_registro(Control ctrl_id_sem,Control ctrl_nro_matutina_sem,Control ctrl_nro_vespertina_sem,Control ctrl_nro_nocturna,Control ctrl_nro_emp_sem,Control ctrl_nro_dias_sem,TextBox txt_estado_sem,DateTime dpk_fecha_registro_sem,DateTime dpk_fecha_inicio_sem,DateTime dpk_fecha_fin_sem)
		{
			try
			{
				semana_base new_semana_base =valida_campos_semana_base(ctrl_id_sem,ctrl_nro_matutina_sem,ctrl_nro_vespertina_sem,ctrl_nro_nocturna,ctrl_nro_emp_sem,ctrl_nro_dias_sem,txt_estado_sem,dpk_fecha_registro_sem,dpk_fecha_inicio_sem,dpk_fecha_fin_sem); 
				if(new_semana_base!=null)
					GrabarViaSql(new_semana_base);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		#endregion

	}
}
